<?php
/**
 * Module.class.php
 *
 * DoitPHP系统module的基类
 * @author tommy <streen003@gmail.com>
 * @copyright  Copyright (c) 2010 Tommy Software Studio
 * @link http://www.doitphp.com
 * @license New BSD License.{@link http://www.opensource.org/licenses/bsd-license.php}
 * @version $Id: Module.class.php 1.0 2011-3-24 20:10:00Z tommy $
 * @package core
 * @since 1.0
 */

if (!defined('IN_DOIT')) {
    exit();
}

abstract class Module extends Controller {

    /**
     * 设置视图布局
     *
     * 注:Module不支持布局
     * @access public
     * @return boolean
     */
    public function set_layout() {

        return false;
    }

    /**
     * 设置视图主题
     *
     * 扩展module里本功能是不支持的,所以返回false
     * @access public
     * @return boolean
     */
    public function set_theme() {

        return false;
    }

    /**
     * 视图类的实例化
     *
     * 注:扩展module的视图格式不支持html文件
     * @access public
     * @return boolean
     */
    public function template() {

        return true;
    }

    /**
     * 获取当前扩展module目录的路径
     *
     * @access public
     * @return string    目录的路径
     */
    public function get_module_root() {

        return MODULE_DIR . $this->get_module_id() . DIRECTORY_SEPARATOR;
    }

    /**
     * 获取当前Module目录的URL
     *
     * @access public
     * @return string    当前Moudle目录的URL
     */
    public function get_module_url() {

        return $this->get_base_url() . 'modules/' . $this->get_module_id() . '/';
    }

    /**
     * 扩展module的视图显示
     *
     * 注:扩展module的视图文件放在特定的目录里,所以扩展module不支持多种主题
     * @access public
     * @param sring $view_name 视图文件名
     * @param array $_data    视图变量数组(所要赋值的视图变量)
     * @return void
     */
    public function display($view_name = null, $_data = array()) {

        //参数分析
        $view_file = $this->view($view_name);

        if (!empty($_data) && is_array($_data)) {
            extract($_data, EXTR_PREFIX_SAME, 'data');
            unset($_data);
        }

        ob_start();
        include $view_file;
        echo ob_get_clean();
    }

    /**
     * 获取当前Module的名称
     *
     * @access protected
     * @return string    Module名称
     */
    protected function get_module_id() {

        return substr(strtolower(get_class($this)), 0, -6);
    }

    /**
     * 分析module的视图文件
     *
     */
    public function view($file_name = null) {

        //获取当前module文件路径
        $module_name = $this->get_module_id();

        //参数分析
        if (!$file_name) {
            $file_name = $module_name;
        }

        return MODULE_DIR . $module_name . '/views/' . $file_name . '.php';
    }
}